package com.qst.system.controller;

import com.qst.common.core.controller.BaseController;
import com.qst.common.core.domain.AjaxResult;
import com.qst.common.core.page.TableDataInfo;
import com.qst.system.domain.vo.MaterialsVo;
import com.qst.system.service.IMaterialsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 材料管理控制器
 * 对应前端 Materials 页面，权限标识前缀：system:materials
 */
@RestController
@RequestMapping("/system/materials")
public class MaterialsController extends BaseController {

    @Autowired
    private IMaterialsService materialsService;

    /**
     * 材料列表查询（对应前端“搜索/刷新列表”功能）
     * 权限：基础权限（查看列表）
     */
    @PreAuthorize("@ss.hasPermi('system:materials')")
    @GetMapping("/list")
    public TableDataInfo selectMaterialsList(MaterialsVo materials) {
        // 开启分页（BaseController 提供的分页工具）
        startPage();
        // 调用Service查询列表（VO平级封装企业名称、贷款编号）
        List<MaterialsVo> materialsList = materialsService.selectMaterialsList(materials);
        // 封装分页结果返回（适配前端表格分页）
        return getDataTable(materialsList);
    }

    /**
     * 材料详情查询（对应前端“修改前加载详情”功能）
     * 权限：修改权限（与修改接口共用权限）
     */
    @PreAuthorize("@ss.hasPermi('system:materials:edit')")
    @GetMapping("/{lisId}")
    public AjaxResult selectMaterialsById(@PathVariable Long lisId) {
        // 调用Service查询单条详情（包含VO平级字段）
        MaterialsVo materials = materialsService.selectMaterialsById(lisId);
        return AjaxResult.success(materials);
    }

    /**
     * 材料新增（对应前端“新增”按钮功能）
     * 权限：新增权限
     */
    @PreAuthorize("@ss.hasPermi('system:materials:add')")
    @PostMapping
    public AjaxResult addMaterials(@RequestBody MaterialsVo materials) {
        // 调用Service新增（返回影响行数，BaseController 适配结果）
        return toAjax(materialsService.insertMaterials(materials));
    }

    /**
     * 材料修改（对应前端“修改”按钮功能）
     * 权限：修改权限
     */
    @PreAuthorize("@ss.hasPermi('system:materials:edit')")
    @PutMapping
    public AjaxResult editMaterials(@RequestBody MaterialsVo materials) {
        // 调用Service修改（返回影响行数）
        return toAjax(materialsService.updateMaterials(materials));
    }

    /**
     * 材料删除（支持单条/批量删除，对应前端“删除”按钮功能）
     * 权限：删除权限
     */
    @PreAuthorize("@ss.hasPermi('system:materials:remove')")
    @DeleteMapping("/{lisIds}")
    public AjaxResult removeMaterials(@PathVariable String lisIds) {
        try {
            // 处理单条删除（ID不包含逗号）
            if (!lisIds.contains(",")) {
                return toAjax(materialsService.deleteMaterialsById(Long.parseLong(lisIds)));
            }
            // 处理批量删除（ID用逗号分隔）
            String[] idStrArray = lisIds.split(",");
            Long[] lisIdArray = new Long[idStrArray.length];
            for (int i = 0; i < idStrArray.length; i++) {
                lisIdArray[i] = Long.parseLong(idStrArray[i].trim());
            }
            return toAjax(materialsService.deleteMaterialsByIds(lisIdArray));
        } catch (NumberFormatException e) {
            // 处理ID格式错误（如非数字）
            return AjaxResult.error("删除失败：ID格式不正确（需为数字）");
        } catch (Exception e) {
            // 处理其他异常（如关联数据无法删除）
            return AjaxResult.error("删除失败：" + e.getMessage());
        }
    }

}